﻿using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Itdavany;
using Itdavany.Data;
using Itdavany.Objects;
using Itdavany.Utility;



namespace Itdavany
{
    // Itdavany.Game - Microsoft.Xna.Framework.Game 상속하여 기능 확장

    public class Game : Microsoft.Xna.Framework.Game
    {

        private Stage curstage;     //현재 핸들링중인 Stage

        // (Attr) CurrentStage : get, set - 현재 핸들링하는 Stage 설정
        protected Stage CurrentStage
        {
            get
            {
                return curstage;
            }

            set
            {
                curstage = value;
            }
        }

        public Game()
        {
            curstage = null;

            Shared.Initialize(this);

            //Activated += new EventHandler(OnActivated);
        }

        // 초기화 루틴
        protected sealed override void LoadGraphicsContent(bool loadAllContent)
        {
            // ...왠지 상식적으로는 Initialize 에다가 해야 할 거 같지만
            // 그래픽 관련 초기화는 여기에서 해줘야 한다. (안그러면 장렬히 Crash)

            //Shared.Initialize(this);

            Load();


            base.LoadGraphicsContent(loadAllContent);
        }

        // 로딩 부분
        protected virtual void Load()
        {
        }


        // 업데이트 부분.
        protected override void Update(GameTime gameTime)
        {
            KeyboardInput.Update();
            MouseInput.Update();
            Audio.Update();

            if(curstage != null)
                curstage.Update(gameTime);

            base.Update(gameTime);
        }

        // 그리기 전에 화면 지우기
        protected override bool BeginDraw()
        {
            Shared.GraphicsDevice.Clear(Color.Black);

            return base.BeginDraw();
        }

        // 그리기 부분. - 더이상 상속 불가.
        protected sealed override void Draw(GameTime gameTime)
        {
            if(curstage != null)
                curstage.Draw();

            base.Draw(gameTime);
        }


        // 액티브될때마다 폰트 Reset하기...ㅁㄴㅇㄹ
        protected override void  OnActivated(object sender, EventArgs args)
        {
            SharedFont.Reset();

            base.OnActivated(sender, args);
        }
    }
}
